package code.springboot.idempotent.config;

import code.springboot.idempotent.aspect.IdempotentAspect;
import code.springboot.idempotent.keyresolver.impl.DefaultIdempotentKeyResolver;
import code.springboot.idempotent.keyresolver.impl.ExpressionIdempotentKeyResolver;
import code.springboot.idempotent.redis.IdempotentRedisService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.StringRedisTemplate;

@SuppressWarnings("all")
@Configuration
//@AutoConfiguration
public class IdempotentAutoConfig {

    @Bean
    public DefaultIdempotentKeyResolver defaultIdempotentKeyResolver() {
        return new DefaultIdempotentKeyResolver();
    }

    @Bean
    public ExpressionIdempotentKeyResolver expressionIdempotentKeyResolver() {
        return new ExpressionIdempotentKeyResolver();
    }

    @Bean
    public IdempotentRedisService idempotentRedisDAO(StringRedisTemplate RedisTemplate) {
        return new IdempotentRedisService(RedisTemplate);
    }

    @Bean
    public IdempotentAspect idempotentAspect(IdempotentRedisService idempotentRedisService) {
        return new IdempotentAspect(idempotentRedisService);
    }

}

